package cn.buk.api.azure;

import com.azure.storage.blob.models.BlobProperties;

import java.io.InputStream;
import java.util.List;

/**
 * @author yfdai
 */
public interface BlobService {

  /**
   * 创建容器
   * @param containerName 容器名称
   * @return 1-创建成功；0-已存在；-1-其它错误
   */
  int createContainer(String containerName);

  /**
   * 获取存储账户里的容器名称
   * @return
   */
  List<String> listContainerNames();

  /**
   * 获取容器里的文件名称
   * @return
   * @param containerName 容器名称
   */
  List<String> listContainerBlobs(String containerName);

  /**
   * 生成带有sas令牌的blob url
   * @param containerName
   * @param blobName
   * @param identifier  identifier Name of the access policy
   * @return
   */
  String generateBlobUrlWithSas(String containerName, String blobName, String identifier);

  /**
   * 上传本地文件
   * @param containerName 容器名称
   * @param localFileName 本地文件名称
   * @param blobName 指定了blob名称，可以为null
   * @return 返回blob名称
   */
  String uploadLocalFile(String containerName, String localFileName, String blobName);

  /**
   * 上传本地文件
   * @param containerName 容器名称
   * @param localFileName 本地文件名
   * @return 返回blob名称
   */
  String uploadLocalFile(String containerName, String localFileName);

  /**
   * 上传url文件
   * @param containerName 容器名称
   * @param url 文件的url
   * @param blobName 指定了blob名称，可以为null
   * @return 返回blob名称
   */
  String uploadUrlFile(String containerName, String url, String blobName);

  String uploadUrlFile(String containerName, String url);

  String uploadInputStream(String containerName, InputStream inputStream, long length, String blobName);

  BlobProperties downloadFile(String containerName, String blobName, String fileName);
}
